package com.rp.dao.local;

import java.util.GregorianCalendar;
import java.util.TimeZone;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.rp.model.Configuracao;
import com.rp.model.Produto;

public class ConfiguracaoLDAO {
    private Context context;

    public ConfiguracaoLDAO(Context context) {
	this.context = context;
    }

    private static final String DB_NAME = "DB_RP";

    public void criarTabela1() throws Throwable {
	SQLiteDatabase BancoDados = null;
	try {
	    BancoDados = context.openOrCreateDatabase(DB_NAME,
		    Context.MODE_WORLD_READABLE, null);
	    BancoDados
		    .execSQL("CREATE TABLE IF NOT EXISTS configuracao (data_sincronizacao_produtos_enviar INTEGER, data_sincronizacao_estabelecimentos_enviar  INTEGER, data_sincronizacao_valores_enviar  INTEGER,data_sincronizacao_produtos_receber  INTEGER, data_sincronizacao_estabelecimentos_receber INTEGER, data_sincronizacao_valores_receber INTEGER);");
	    if (getConfiguracao() == null) {
		BancoDados
			.execSQL("INSERT INTO configuracao (data_sincronizacao_produtos_enviar, data_sincronizacao_estabelecimentos_enviar, data_sincronizacao_valores_enviar,data_sincronizacao_produtos_receber, data_sincronizacao_estabelecimentos_receber, data_sincronizacao_valores_receber) VALUES (0,0,0,0,0,0);");
	    }
	} finally {
	    BancoDados.close();
	}
    }

    public Configuracao getConfiguracao() throws Throwable {
	Produto p = null;
	SQLiteDatabase BancoDados = null;
	try {
	    BancoDados = context.openOrCreateDatabase(DB_NAME,
		    Context.MODE_WORLD_READABLE, null);
	    Cursor cursor = BancoDados.rawQuery("SELECT * FROM configuracao;",
		    null);
	    try {
		if (cursor.moveToNext()) {
		    TimeZone timeZone = TimeZone.getTimeZone("UTC");
		    GregorianCalendar dataAtualizacaoProdutosEnviados = new GregorianCalendar(
			    timeZone);
		    dataAtualizacaoProdutosEnviados.setTimeInMillis(cursor
			    .getLong(0));
		    GregorianCalendar dataAtualizacaoEstabelecimentosEnviados = new GregorianCalendar(
			    timeZone);
		    dataAtualizacaoEstabelecimentosEnviados
			    .setTimeInMillis(cursor.getLong(1));
		    GregorianCalendar dataAtualizacaoValoresEnviados = new GregorianCalendar(
			    timeZone);
		    dataAtualizacaoValoresEnviados.setTimeInMillis(cursor
			    .getLong(2));
		    GregorianCalendar dataAtualizacaoProdutosRecebidos = new GregorianCalendar(
			    timeZone);
		    dataAtualizacaoProdutosRecebidos.setTimeInMillis(cursor
			    .getLong(3));
		    GregorianCalendar dataAtualizacaoEstabelecimentosRecebidos = new GregorianCalendar(
			    timeZone);
		    dataAtualizacaoEstabelecimentosRecebidos
			    .setTimeInMillis(cursor.getLong(4));
		    GregorianCalendar dataAtualizacaoValoresrecebidos = new GregorianCalendar(
			    timeZone);
		    dataAtualizacaoValoresrecebidos.setTimeInMillis(cursor
			    .getLong(5));
		    return new Configuracao(dataAtualizacaoProdutosRecebidos,
			    dataAtualizacaoEstabelecimentosRecebidos,
			    dataAtualizacaoValoresrecebidos,
			    dataAtualizacaoProdutosEnviados,
			    dataAtualizacaoEstabelecimentosEnviados,
			    dataAtualizacaoValoresEnviados);
		}
	    } finally {
		cursor.close();
	    }
	} finally {
	    BancoDados.close();
	}
	return null;
    }

    public void update(Configuracao config) {
	long dataAtualizacaoEstabelecimentosEnviados = config
		.getDataAtualizacaoEstabelecimentosEnviados().getTimeInMillis();
	long dataAtualizacaoProdutosEnviados = config
		.getDataAtualizacaoProdutosEnviados().getTimeInMillis();
	long dataAtualizacaoValoresEnviados = config
		.getDataAtualizacaoValoresEnviados().getTimeInMillis();
	long dataAtualizacaoEstabelecimentosRecebidos = config
		.getDataAtualizacaoEstabelecimentosRecebidos()
		.getTimeInMillis();
	long dataAtualizacaoProdutosRecebidos = config
		.getDataAtualizacaoProdutosRecebidos().getTimeInMillis();
	long dataAtualizacaoValoresRecebidos = config
		.getDataAtualizacaoValoresrecebidos().getTimeInMillis();
	SQLiteDatabase BancoDados = null;
	try {
	    BancoDados = context.openOrCreateDatabase(DB_NAME,
		    Context.MODE_WORLD_READABLE, null);
	    BancoDados
		    .execSQL("UPDATE configuracao SET data_sincronizacao_produtos_enviar = "
			    + dataAtualizacaoProdutosEnviados
			    + ", data_sincronizacao_estabelecimentos_enviar = "
			    + dataAtualizacaoEstabelecimentosEnviados
			    + ",data_sincronizacao_valores_enviar = "
			    + dataAtualizacaoValoresEnviados
			    + ", data_sincronizacao_produtos_receber = "
			    + dataAtualizacaoProdutosRecebidos
			    + ", data_sincronizacao_estabelecimentos_receber = "
			    + dataAtualizacaoEstabelecimentosRecebidos
			    + ",data_sincronizacao_valores_receber = "
			    + dataAtualizacaoValoresRecebidos + ";");
	} finally {
	    BancoDados.close();
	}
    }
}
